package entidades;

import java.util.ArrayList;
import java.sql.Date;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

@Entity
public class Paciente extends Usuario {

    private static final long serialVersionUID = 1L;
    @Column(nullable = false)
    private String numSeguridadSocial;
    @OneToOne
    @JoinColumn(nullable = false)
    private HistoriaClinica hClinica;
    @OneToMany(mappedBy = "paciente")
    @JoinColumn(nullable = false)
    private List<Cita> cita = new ArrayList<Cita>();
    @ManyToMany
    @JoinTable(name = "Tabla_lista_paciente",
            joinColumns =
            @JoinColumn(name = "paciente_fk"),
            inverseJoinColumns =
            @JoinColumn(name = "lista_espera_fk"))
    private List<ListaDeEspera> lista_de_espera;
    @ManyToMany
    @JoinTable(name = "Consulta_informacion_medico",
            joinColumns =
            @JoinColumn(name = "paciente_fk"),
            inverseJoinColumns =
            @JoinColumn(name = "medico_fk"))
    private List<Medico> medico_consultable;
    @ManyToOne
    private Medico medico;

    public Paciente() {
    }

    public Paciente(String dni, String password, String nombre, String apellidos, Date fechaNacimiento, String email, String telefono,
            String numSeguridadSocial) {
        setDni(dni);
        setPassword(password);
        setNombre(nombre);
        setApellidos(apellidos);
        setFechaNacimiento(fechaNacimiento);
        setEmail(email);
        setTelefono(telefono);
        this.numSeguridadSocial = numSeguridadSocial;
    }

    public String getNumSeguridadSocial() {
        return numSeguridadSocial;
    }

    public void setNumSeguridadSocial(String numSeguridadSocial) {
        this.numSeguridadSocial = numSeguridadSocial;
    }

    public HistoriaClinica gethClinica() {
        return hClinica;
    }

    public void sethClinica(HistoriaClinica hClinica) {
        this.hClinica = hClinica;
    }

    public List<Cita> getCita() {
        return cita;
    }

    public void setCita(List<Cita> cita) {
        this.cita = cita;
    }

    public List<ListaDeEspera> getLista_de_espera() {
        return lista_de_espera;
    }

    public void setLista_de_espera(List<ListaDeEspera> lista_de_espera) {
        this.lista_de_espera = lista_de_espera;
    }

    public List<Medico> getMedico_consultable() {
        return medico_consultable;
    }

    public void setMedico_consultable(List<Medico> medico_consultable) {
        this.medico_consultable = medico_consultable;
    }

    public Medico getMedico() {
        return medico;
    }

    public void setMedico(Medico medico) {
        this.medico = medico;
    }
    

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 71 * hash + this.numSeguridadSocial.hashCode();
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Paciente other = (Paciente) obj;
        if (this.numSeguridadSocial == null ? other.numSeguridadSocial != null : !this.numSeguridadSocial.equals(other.numSeguridadSocial)) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "Paciente{" + "numSeguridadSocial=" + numSeguridadSocial + '}';
    }
}
